from collections import defaultdict
from typing import List 
class Solution:
    def countTrapezoids(self, points: List[List[int]]) -> int:
        # 使用字典记录每个y坐标出现的次数
        point_num = defaultdict(int)
        # 定义模数，用于防止结果过大
        mod = 10**9 + 7
        # 初始化梯形数量ans和总和total_sum为0
        ans, total_sum = 0, 0
        # 遍历所有点，统计每个y坐标出现的次数
        for point in points:
            point_num[point[1]] += 1
        # 遍历每个y坐标出现的次数
        for p_num in point_num.values():
            # 计算在同一条水平线上选择两个点作为梯形的底边的组合数
            edge = p_num * (p_num - 1) // 2
            # 更新梯形总数，使用模运算防止溢出
            ans = (ans + edge * total_sum) % mod
            # 更新总和，同样使用模运算
            total_sum = (total_sum + edge) % mod
        # 返回最终的梯形数量
        return ans

